python总结

您所在的位置:网站首页 python query函数作用 python总结

python总结

2024-07-07 04:21:33| 来源: 网络整理| 查看: 265

接上一关的练习代码:

#首先得登录上,记住请求的时候用post,然后拿到cookies import requests url = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36' } ###一定要注意,如果有很多的登录参数的时候,不要忘记,,,,,,,,,,,,,,,,,,,,,,,!!! data = { 'log': 'spiderman', 'pwd': 'crawler334566', 'wp-submit': '登录', 'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn', 'testcookie': '1' } #post请求 login_in = requests.post(url, headers = headers, data = data) print(login_in)#检验是否请求成功 #下一步,提取cookies cookies = login_in.cookies #来来来,继续评论 url_1 = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php' headers_1 = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36' } data_1 = { 'comment': input('请输入评论内容:'), 'submit': '发表评论', 'comment_post_ID': '13', 'comment_parent': '0' } #有密码的请求一定要用post() comment = requests.post(url_1, headers = headers_1, data = data_1, cookies = cookies) print(comment.status_code)

Now,现在我们已经成功的发表评论了。 但是找个代码还有优化的空间。 如果继续优化,我们不得不提出一个新的概念-session (会话)。

1、理解下 session (会话)

所谓的会话,你可以理解成我们用浏览器上网,到关闭浏览器的这一过程。session是会话过程中,服务器用来记录特定用户会话的信息。 比如今天双11,你淘宝网浏览了哪些商品,购物出里放了多少件物品,这些记录都会被保存在session中。

image.png session 和 cookies 有什么关系呢? session和cookies的关系还非常密切——cookies中存储着session的编码信息,session中又存储了cookies的信息。 当浏览器第一次访问购物网页时,服务器会返回set cookies的字段给浏览器,而浏览器会把cookies保存到本地。 等浏览器第二次访问这个购物网页时,就会带着cookies去请求,而因为cookies里带有会话的编码信息,服务器立马就能辨认出这个用户,同时返回和这个用户相关的特定编码的session。 其实这句话很绕,简单理解就是,cookies里有session,session里有cookies,反正两者联系密切! image.png

import requests #引用requests。 session = requests.session() #用requests.session()创建session对象,相当于创建了一个空的会话框,准备保持cookies。 url = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } data = { 'log':input('请输入账号:'), #用input函数填写账号和密码,这样代码更优雅,而不是直接把账号密码填上去。 'pwd':input('请输入密码:'), 'wp-submit':'登录', 'redirect_to':'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/', 'testcookie':'1' } session.post(url,headers=headers,data=data) #在创建的session下用post发起登录请求,session这个时候就包括 cookies 了。 url_1 = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php' #把我们想要评论的文章网址赋值给url_1。 data_1 = { 'comment': input('请输入你想要发表的评论:'), 'submit': '发表评论', 'comment_post_ID': '13', 'comment_parent': '0' } #把有关评论的参数封装成字典。 comment = session.post(url_1,headers=headers,data=data_1) #在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。 print(comment) #打印comment #省下一步cookies提取过程 2、继续优化?

当然可以了,cookies能帮我们保存登录的状态,那我们就在第一次登录时把cookies存储下来,等下次登录再把存储的cookies读取出来,这样就不用重复输入账号密码了。 所以第一步就是存储cookies

import requests session = requests.session() url = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } data = { 'log':input('请输入账号:'), 'pwd':input('请输入密码:'), 'wp-submit':'登录', 'redirect_to':'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/', 'testcookie':'1' } session.post(url,headers=headers,data=data) print(type(session.cookies)) #打印cookies的类型,session.cookies就是登录的cookies print(session.cookies) #打印cookies

Cookie 本身的内容有点像列表,里面像字典的键与值。 转换成字符串吧!强行转,用JSON!

image.png image.png

现在的代码就是:

import requests,json #引入requests和json模块。 session = requests.session() url = ' https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } data = { 'log': input('请输入你的账号:'), 'pwd': input('请输入你的密码:'), 'wp-submit': '登录', 'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/', 'testcookie': '1' } session.post(url, headers=headers, data=data) cookies_dict = requests.utils.dict_from_cookiejar(session.cookies) #把cookies转化成字典。 print(cookies_dict) #打印cookies_dict cookies_str = json.dumps(cookies_dict) #调用json模块的dumps函数,把cookies从字典再转成字符串。 print(cookies_str) #打印cookies_str f = open('cookies.txt', 'w') #创建名为cookies.txt的文件,以写入模式写入内容。 f.write(cookies_str) #把已经转成字符串的cookies写入文件。 f.close() #关闭文件。

既然明白了cookies的存储,那么读取是不是也要学习下呢?

3、读取cookies

我们存储cookies时,是把它先转成字典,再转成字符串。读取cookies则刚好相反,要先把字符串转成字典,再把字典转成cookies本来的格式。

image.png cookies_txt = open('cookies.txt', 'r') #以reader读取模式,打开名为cookies.txt的文件。 cookies_dict = json.loads(cookies_txt.read()) #调用json模块的loads函数,把字符串转成字典。 cookies = requests.utils.cookiejar_from_dict(cookies_dict) #把转成字典的cookies再转成cookies本来的格式。 session.cookies = cookies #获取cookies:就是调用requests对象(session)的cookies属性。

我认为现在就要去练习下存储和读取了! 不练习代码,不要学了! 代码还能优化吗? 如果程序能读取到cookies,就自动登录,发表评论;如果读取不到,就重新输入账号密码登录,再评论?

import requests,json session = requests.session() #创建会话。 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' } #添加请求头,避免被反爬虫。 try: #如果能读取到cookies文件,执行以下代码,跳过except的代码,不用登录就能发表评论。 cookies_txt = open('cookies.txt', 'r') #以reader读取模式,打开名为cookies.txt的文件。 cookies_dict = json.loads(cookies_txt.read()) #调用json模块的loads函数,把字符串转成字典。 cookies = requests.utils.cookiejar_from_dict(cookies_dict) #把转成字典的cookies再转成cookies本来的格式。 session.cookies = cookies #获取cookies:就是调用requests对象(session)的cookies属性。 except FileNotFoundError: #如果读取不到cookies文件,程序报“FileNotFoundError”(找不到文件)的错,则执行以下代码,重新登录获取cookies,再评论。 url = ' https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' #登录的网址。 data = {'log': input('请输入你的账号:'), 'pwd': input('请输入你的密码:'), 'wp-submit': '登录', 'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/', 'testcookie': '1'} #登录的参数。 session.post(url, headers=headers, data=data) #在会话下,用post发起登录请求。 cookies_dict = requests.utils.dict_from_cookiejar(session.cookies) #把cookies转化成字典。 cookies_str = json.dumps(cookies_dict) #调用json模块的dump函数,把cookies从字典再转成字符串。 f = open('cookies.txt', 'w') #创建名为cookies.txt的文件,以写入模式写入内容 f.write(cookies_str) #把已经转成字符串的cookies写入文件 f.close() #关闭文件 url_1 = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php' #文章的网址。 data_1 = { 'comment': input('请输入你想评论的内容:'), 'submit': '发表评论', 'comment_post_ID': '13', 'comment_parent': '0' } #评论的参数。 comment = session.post(url_1,headers=headers,data=data_1) #在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。 print(comment.status_code) #打印comment的状态码

是否还能再优化呢? 因为存在一个问题,就是cookies过期的问题,所以再优化下:

import requests, json session = requests.session() headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' } def cookies_read(): cookies_txt = open('cookies.txt', 'r') cookies_dict = json.loads(cookies_txt.read()) cookies = requests.utils.cookiejar_from_dict(cookies_dict) return (cookies) # 以上4行代码,是cookies读取。 def sign_in(): url = ' https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' data = {'log': input('请输入你的账号'), 'pwd': input('请输入你的密码'), 'wp-submit': '登录', 'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/', 'testcookie': '1'} session.post(url, headers=headers, data=data) cookies_dict = requests.utils.dict_from_cookiejar(session.cookies) cookies_str = json.dumps(cookies_dict) f = open('cookies.txt', 'w') f.write(cookies_str) f.close() # 以上5行代码,是cookies存储。 def write_message(): url_2 = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php' data_2 = { 'comment': input('请输入你要发表的评论:'), 'submit': '发表评论', 'comment_post_ID': '13', 'comment_parent': '0' } return (session.post(url_2, headers=headers, data=data_2)) #以上9行代码,是发表评论。 try: session.cookies = cookies_read() except FileNotFoundError: sign_in() session.cookies = cookies_read() num = write_message() if num.status_code == 200: print('成功啦!') else: sign_in() session.cookies = cookies_read() num = write_message()


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭